package com.gpframework.module.order.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gpframework.common.core.domain.entity.SysUser;
import com.gpframework.module.order.domain.GpOrderFlow;
import com.gpframework.module.order.domain.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
/**
 * @ClassName GpOrderFlow
 * @Author gpframework
 * @Date 2023-06-16
 * @Version 1.0.0
 * @Description 员工订单流转详情Mapper接口
 */
public interface GpOrderFlowMapper extends BaseMapper<GpOrderFlow> {

    /**
    * 列表
    * @param lqw
    * @return
    */
    List<GpOrderFlowVo> listVo(@Param("ew") QueryWrapper<GpOrderFlow> lqw);

    /**
    * 对象
    * @param id
    * @return
    */
    GpOrderFlowVo getVo(@Param("id")Long id);

    FormsVo userFormVo(@Param("userId") String userId, @Param("type") String type, @Param("organiseUnit") String organiseUnit, @Param("startTime") String startTime, @Param("endTime") String endTime);

    FormsVo deptFormVo(@Param("deptId") String deptId, @Param("type") String type, @Param("userId") String userId, @Param("organiseUnit") String organiseUnit, @Param("startTime") String startTime, @Param("endTime") String endTime);

    Long getTotalCompleteOrderNum(@Param("deptId") String deptId, @Param("type") String type, @Param("userId") String userId, @Param("organiseUnit") String organiseUnit, @Param("startTime") String startTime, @Param("endTime") String endTime);

    List<FormsDetailsVo> userFormDetailsList(@Param("userId") String userId, @Param("type") String type, @Param("organiseUnit") String organiseUnit, @Param("startTime") String startTime, @Param("endTime") String endTime);

    List<FormsDetailsVo> deptFormDetailsList(@Param("deptId") String deptId, @Param("type") String type, @Param("userId") String userId, @Param("organiseUnit") String organiseUnit, @Param("startTime") String startTime, @Param("endTime") String endTime);

    EfficiencyVo looseShearEfficiency(@Param("deptId") String deptId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    // 获取散剪录入订单数
    Long looseShearEnterNum(@Param("startTime") String startTime, @Param("endTime") String endTime);

    // 获取散剪未完成订单数
    Long looseShearRemainNum(@Param("startTime") String startTime, @Param("endTime") String endTime);

    EfficiencyVo deptEfficiency(@Param("type") String type, @Param("deptId") String deptId, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("orderCharacteristics") String orderCharacteristics);

    // 获取拿货/备货/仓库发货录入订单数
    Long deptEnterNum(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("orderCharacteristics") String orderCharacteristics);

    // 获取拿货/备货/仓库发货未完成订单数
    Long deptRemainNum(@Param("type") String type, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("orderCharacteristics") String orderCharacteristics);

    // 获取中转发货录入订单数
    Long transferEnterNum(@Param("startTime") String startTime, @Param("endTime") String endTime);

    // 获取中转发货未完成订单数
    Long transferRemainNum(@Param("startTime") String startTime, @Param("endTime") String endTime);

    List<OrderQuantityDayVo> getOrderQuantityDayVoList(@Param("deptId") String deptId, @Param("userId") Long userId, @Param("orderStatus") String orderStatus, @Param("startTime") String startTime, @Param("endTime") String endTime);

    List<SysUser> selectUserList(@Param("deptId") String deptId, @Param("orderStatus") String orderStatus, @Param("startTime") String startTime, @Param("endTime") String endTime);

    String getFlowStatus(@Param("ew") QueryWrapper<GpOrderFlow> lqw);

    String getFlowStatusHistory(@Param("ew") QueryWrapper<GpOrderFlow> lqw);

    String getAnnexList(@Param("ew") QueryWrapper<GpOrderFlow> lqw);

    Long getTotalDuration(Long orderId);


}
